A well known problem in the art of serial communication is the need to regenerate from a data stream the clock that was used in generating a data stream. In particular, a parallel architecture is often employed for the data receiver when the data stream is at a very high bit rate. Typically, such a xeceiver is made up of several parallel data samplers, and each of the data samplers only looks at a portion of the entire data stream, such portion being at a lower bit rate than that of the overall data stream. Nevertheless, to detect the data, each of the parallel data samplers must look in the center of a bit time of a high speed bit. This center time is determined by the recovered clock.
To detect the clock, conventionally, an additional sampler is used as a phase detector and it samples the incoming data stream at a point in between two bits, at which time an edge may occur. Such a sampler only looks at the data stream at the same rate as the data samplers, and thus it sees the occurrence of edges less frequently than if it were looking at the overall data stream. However, since conventional codes distribute edges throughout the overall data stream, enough edges are available for use by the phase detector sampler so that it can detect the clock.
Unfortunately, because there is no regular placement of the edges, the receiver cannot make use of all the edges which were introduced by the code for clock recovery purposes. As a result, the amount of jitter is increased over that generated by a standard, non-parallel architecture receiver. This often results in an undesirable higher bit error rate.
The same problem also occurs when multilevel symbols are used in the data stream instead of bits, e.g., when using pulse amplitude modulated symbols.